package com.Sake.common.utils.result;

import com.Sake.common.constant.ReturnMsg;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

/**
 * 自定义返回工具
 *
 * @author zsh
 * @version 1.0.0
 * @date 2021.6.19
 */
@Component
public  class ResultUtil {

    /**
     * 返回 自定义 jsonObject
     *
     * @param data      业务数据
     * @param returnMsg 全局返回信息
     * @return JSONObject
     */
    public  JSONObject resultJson(Object data, ReturnMsg returnMsg) {
        return resultTool(data, returnMsg);

    }

    /**
     * 返回成功
     *
     * @return JSONObject
     */
    public JSONObject resultSuccess() {
        return resultCustomMsgAndData(null, ReturnMsg.SUCCESS, "请求已成功");
    }

    /**
     * 返回成功并携带数据
     *
     * @param data 要携带的业务数据
     * @return JSONObject
     */
    public JSONObject resultSuccessData(Object data) {
        return resultCustomMsgAndData(data, ReturnMsg.SUCCESS, "请求已成功");
    }

    /**
     * 根据返回码返回数据
     *
     * @param code 返回码
     * @return JSONObject
     */
    public JSONObject resultByCode(int code) {

        if (code > 0) {
            ReturnMsg.SUCCESS.setMsg("请求已成功!");
            return resultTool(null, ReturnMsg.SUCCESS);
        } else {
            return resultTool(null, ReturnMsg.FAILED);
        }

    }

    /**
     * 返回自定义消息
     *
     * @param returnMsg 返回消息
     * @param msg       自定义消息描述
     * @return
     */
    public JSONObject resultCustomMsg(ReturnMsg returnMsg, String msg) {
        //给反回消息重新进行描述
        if (StringUtils.isNotBlank(msg)) {
            returnMsg.setMsg(msg);
        }
        return resultTool(null, returnMsg);
    }

    /**
     * 自定义返回信息并返回数据
     *
     * @param data      数据
     * @param returnMsg 返回信息
     * @param msg       自定义信息
     * @return
     */
    public JSONObject resultCustomMsgAndData(Object data, ReturnMsg returnMsg, String msg) {
        returnMsg.setMsg(msg);
        return resultTool(data, returnMsg);
    }


    /**
     * 返回数据工具类
     *
     * @return
     */
    private JSONObject resultTool(Object data, ReturnMsg returnMsg) {
        JSONObject datas = new JSONObject();
        if (data == null) {
            datas.put("data", (new JSONObject()));
        } else {
            datas.put("data", data);
        }
        datas.put("msg", returnMsg.getMsg());
        datas.put("code", returnMsg.getCode());
        return datas;
    }


    /**
     * 返回分页数据工具类
     *
     * @param data     业务数据
     * @param pageInfo 分页信息
     * @return
     */
    public JSONObject resultPage(Object data, PageInfo pageInfo) {
        JSONObject datas = new JSONObject();
        //新建返回的分页数据
        JSONObject resData = new JSONObject();
        //查询的数据
        resData.put("datas", data);
        //当前页
        resData.put("currentPage", pageInfo.getPageNum());
        //每页大小
        resData.put("pageSize", pageInfo.getPageSize());
        //总页码
        resData.put("totalPage", pageInfo.getPages());
        //总行数
        resData.put("totalRow", pageInfo.getTotal());
        //装入返回数据
        datas.put("data", resData);
        datas.put("msg", ReturnMsg.SUCCESS.getMsg());
        datas.put("code", ReturnMsg.SUCCESS.getCode());
        return datas;
    }

}
